package br.com.sis.rh.action;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import br.com.sis.rh.entity.Candidato;
import br.com.sis.rh.entity.Competencia;
import br.com.sis.rh.enums.CamposAbasEnum;
import br.com.sis.rh.facade.AvaliacaoFacade;
import br.com.sis.rh.facade.CandidatoFacade;
import br.com.sis.rh.util.AvaliacaoAux;
import br.com.sis.rh.vo.RetornoAjaxVO;

@Controller
@Scope("request")
@ParentPackage("json-default")
@Namespace(value = "/")
public class AvaliacaoAction extends ComumAuxAction implements ComumAction {

	@Autowired
	private CandidatoFacade candidatoFacade;
	
	@Autowired
	private AvaliacaoFacade avaliacaoFacade;
	
	@Autowired
	private AvaliacaoAux avaliacaoAux;
	
	private RetornoAjaxVO retornoAjax;
	
	private Candidato candidato;
	
	private String competencias;
	
	@Override
	@Action(value="incluirAvaliacao", results={
			@Result(name="success", type="json", params={"root","retornoAjax"})
	})
	public String incluir() {
		retornoAjax = new RetornoAjaxVO();
		
		montaCompetencias();
		
		candidatoFacade.incluirAvaliacao(candidato);
		
		Candidato candidatoAvaliacao = candidatoFacade.recuperarObjetoPorID(candidato);
		
		candidatoAvaliacao.setPorcentagemPreenchidaAvaliacao(calculaPorcentagemPreenchida(CamposAbasEnum.TOTAL_CAMPOS_AVALIACAO.getQuantidadeCampos(), avaliacaoAux.atributosPreenchidos(candidatoAvaliacao)));
		
		retornoAjax.setObjetoRetornado(candidatoAvaliacao);
		retornoAjax.setStatusOperacao(SUCCESS);
		
		return SUCCESS;
	}

	@Override
	@Action(value="alterarAvaliacao", results={
			@Result(name="success", type="json", params={"root","retornoAjax"})
	})
	public String alterar() {
		retornoAjax = new RetornoAjaxVO();
		
		montaCompetencias();
		
		avaliacaoFacade.alterar(candidato.getAvaliacao());

		Candidato candidatoAvaliacao = candidatoFacade.recuperarObjetoPorID(candidato);
		
		candidatoAvaliacao.setPorcentagemPreenchidaAvaliacao(calculaPorcentagemPreenchida(CamposAbasEnum.TOTAL_CAMPOS_AVALIACAO.getQuantidadeCampos(), avaliacaoAux.atributosPreenchidos(candidatoAvaliacao)));
		
		retornoAjax.setObjetoRetornado(candidatoAvaliacao);
		retornoAjax.setStatusOperacao(SUCCESS);
		
		return SUCCESS;
	}
	
	private void montaCompetencias() {
		String [] competenciasSplit = competencias.split(",");
		
		if(competenciasSplit.length != 0) {
			if(competenciasSplit[0] != "") {
				for(String competenciaId : competenciasSplit) {
					Competencia competencia = new Competencia();
					competencia.setId(Integer.valueOf(competenciaId.trim()));
					candidato.getAvaliacao().getCompetencia().add(competencia);
				}			
			}
		}
	}	

	@Override
	public String excluir() {
		return null;
	}

	@Override
	public String listar() {
		return null;
	}

	public RetornoAjaxVO getRetornoAjax() {
		return retornoAjax;
	}

	public void setRetornoAjax(RetornoAjaxVO retornoAjax) {
		this.retornoAjax = retornoAjax;
	}

	public Candidato getCandidato() {
		return candidato;
	}

	public void setCandidato(Candidato candidato) {
		this.candidato = candidato;
	}

	public String getCompetencias() {
		return competencias;
	}

	public void setCompetencias(String competencias) {
		this.competencias = competencias;
	}

}
